package com.xzc.jcip._3_.对象的共享.可见性;

import net.jcip.annotations.NotThreadSafe;

/**
 * 因为指令重排序问题，除了42以外还有2种可能
 * 1-ReaderThread无法结束，因为看不到ready的改变
 * 2-number=0，因为指令重排序，ready与number在主线程是没逻辑关联的，那么有可能ready先被赋值，number后被赋值
 */
@NotThreadSafe
public class NoVisibility {
    private static boolean ready;
    private static int number;

    private static class ReaderThread extends Thread {
        public void run() {
            while (!ready)
                Thread.yield();
            System.out.println(number);
        }
    }

    public static void main(String[] args) {
        new ReaderThread().start();
        number = 42;
        ready = true;
    }
}
